Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 vector-feature-night-mode-enabled skin-theme-clientpref-os vector-sticky-header-enabled" lang="fr" dir="ltr"><head>
<meta charset="UTF-8">
<title>Injection de dépendances</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://fr.wikipedia.org/wiki/Injection_de_d%C3%A9pendances"> <link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Injection_de_dépendances rootpage-Injection_de_dépendances skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Injection de dépendances</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="fr" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="fr" dir="ltr">
<p>L'<b>injection de <a href="Paquet_(logiciel)" title="Paquet (logiciel)">dépendances</a></b> (<i>dependency injection</i> en anglais) est un mécanisme qui permet d'implémenter le principe de l'<a href="Inversion_de_contr%C3%B4le" title="Inversion de contrôle">inversion de contrôle</a>.
</p><p>Il consiste à créer dynamiquement (injecter) les dépendances entre les différents objets en s'appuyant sur une description (<a href="Fichier_de_configuration" title="Fichier de configuration">fichier de configuration</a> ou métadonnées) ou de manière programmatique. Ainsi les dépendances entre <a href="Composant_logiciel" title="Composant logiciel">composants logiciels</a> ne sont plus exprimées dans le code de manière statique mais déterminées dynamiquement à l'exécution.
</p>
<div class="mw-heading mw-heading2"><h2 id="Exemple">Exemple</h2></div>
<p>En <a href="Programmation_orient%C3%A9e_objet" title="Programmation orientée objet">programmation objet</a>, les objets de type <b>A</b> dépendent d'un objet de type <b>B</b> si au moins une des conditions suivantes est vérifiée&nbsp;:
</p>
<ul><li><b>A</b> possède un attribut de type <b>B</b> (<i>dépendance par composition</i>)&nbsp;;</li>
<li><b>A</b> est de type <b>B</b> (<i>dépendance par héritage</i>)&nbsp;;</li>
<li><b>A</b> dépend d'un autre objet de type <b>C</b> qui dépend d'un objet de type <b>B</b> (<i>dépendance par transitivité</i>)&nbsp;;</li>
<li>une méthode de <b>A</b> appelle une méthode de <b>B</b>.</li></ul>
<p>Si <b>A</b> dépend de <b>B</b>, cela implique que pour créer <b>A</b>, on a besoin de <b>B</b> ce qui, en pratique, n'est pas toujours le cas.
</p><p>Pour supprimer la dépendance, un moyen possible consiste à
</p>
<ul><li>créer une <a href="Interface_(programmation_orient%C3%A9e_objet)" title="Interface (programmation orientée objet)">interface</a> <b>I</b> qui contiendra toutes les méthodes que <b>A</b> peut appeler sur <b>B</b>,</li>
<li>indiquer que <b>B</b> implémente l'interface <b>I</b>,</li>
<li>remplacer toutes les références au type <b>B</b> par des références à l'interface <b>I</b> dans <b>A</b>.</li></ul>
<p>Un problème qui se pose est de disposer dans <b>A</b> d'un objet implémentant <b>I</b> alors que l'on ne sait pas comment l'instancier. La solution consiste à créer, par exemple, un objet <b>b</b> de type <b>B</b> et de <i>l'injecter</i> dans un objet de type <b>A</b>. L'injection proprement dite peut se faire&nbsp;:
</p>
<ul><li>à l'instanciation&nbsp;: on passe l'objet <b>b</b> à l'instanciation de <b>A</b></li>
<li>par modificateur&nbsp;: on passe l'objet <b>b</b> à une méthode de <b>A</b> qui va par exemple modifier un attribut (<i>setter</i>)</li></ul>
<style data-mw-deduplicate="TemplateStyles:r194021218">
/* start https://fr.wikipedia.org/ */


.mw-parser-output .autres-projets>.titre{text-align:center;margin:0.2em 0}.mw-parser-output .autres-projets>ul{margin:0;padding:0}.mw-parser-output .autres-projets>ul>li{list-style:none;margin:0.2em 0;text-indent:0;padding-left:24px;min-height:20px;text-align:left;display:block}.mw-parser-output .autres-projets>ul>li>a{font-style:italic}@media(max-width:720px){.mw-parser-output .autres-projets{float:none}}


/* end https://fr.wikipedia.org/ */
</style>
<ul id="bandeau-portail" class="bandeau-portail"><li><span class="bandeau-portail-element"><span class="bandeau-portail-icone"><span class="noviewer" typeof="mw:File"></span></span> <span class="bandeau-portail-texte">Portail de la programmation informatique</span> </span></li> </ul></div><!--htdig_noindex--><div><div class="zim-footer">
Cet article est issu de <a class="external text" title="Dernière modification le 2024-04-29" href="https://fr.wikipedia.org/wiki/?title=Injection_de_d%C3%A9pendances&amp;oldid=214673391">Wikipédia</a>. Sauf mention contraire, le texte est disponible sous <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.fr">Creative Commons Attribution-Share Alike 4.0</a>. Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>

</body></html>